<?php
/**
 * Page gestion des spécialités
 * Permet l'affichage, l'ajout, la suppression et la modification des spécialités
 *
 * @category actions
 * @package administration
 *
 * @author M.CASTANHEIRO, M.MEUNIER, O.PATTE, C.PORTEMER, R.THERY-HERMAIN
 * @version 1.0
 */
class specialiteAction extends shAction {
    /**
     * Fonction appellée automatiquement pour toutes les requêtes de l'action
     */
    public function init() {
	$this->setTitle('Gestion des filières');
	$this->addAriane(shRequest::link('administration'), 'Administration');
	$this->addAriane(shRequest::link('administration', 'filiere'), 'Gestion des filières');
    }

    /**
     * Modification d'une spécialité
     */
    public function executeEdit($_id_specialite) {
	$this->setTitle('Modification d\'une spécialité');

	// On récupère la spécialité
	$specialite = shSGBD::selectOne('SELECT id,id_filiere,intitule FROM specialite WHERE id=?'
		,array($_id_specialite));

	if (!$specialite) {
	    throw new Exception('La spécialité demandée n\'existe pas');
	    return false;
	}

	$formulaire = new shFormulaire;
	$formulaire->setSubmitText('Modifier cette spécialité');

	// Intitulé de la spécialité
	shField::text('Intitulé')
		->setValue($specialite->intitule)
		->appendTo($formulaire);

	// Liste des filières
	$select = shField::select('Filière associée')
		->setValue($specialite->id_filiere)
		->appendTo($formulaire);

	// On rempli le select
	$filieres = shSGBD::select('SELECT id,intitule FROM filiere ORDER BY intitule ASC');
	foreach ($filieres as $filiere) {
	    $select->addOption($filiere->id, $filiere->intitule);
	}

	$formulaire->setCheck(function($formulaire) use ($specialite) {
		    if (!$formulaire->isError()) {
			// On vérifie qu'une spécialité du même nom n'existe pas déja
			$specialite = shSGBD::selectOne('SELECT count(id) AS count '.
				'FROM specialite '.
				'WHERE intitule=:intitule AND id!=:id AND id_filiere=:id_filiere ',
				array (':intitule'=>$formulaire->getField('Intitulé')->getValue(),
				':id_filiere'=>$formulaire->getField('Filière associée')->getValue(),
				':id'=>$specialite->id));
			if ($specialite->count > 0) {
			    $formulaire->getField('Intitulé')->setError('Une autre spécialité de cette filère possède le même intitulé');
			}
		    }
		})
	;

	$formulaire->setSubmit(function($formulaire) use ($specialite) {
		    // On crée le nouveau profil
		    shSGBD::update('UPDATE specialite SET intitule=:intitule, id_filiere=:id_filiere '.
			    'WHERE id=:id',
			    array( ':intitule' => $formulaire->getField('Intitulé')->getValue(),
			    ':id_filiere'=>$formulaire->getField('Filière associée')->getValue(),
			    ':id' => $specialite->id));
		    shAction::redirect('administration','filiere');
		})
	;

	$this->assign('formulaire', $formulaire);
    }

    /**
     * Ajout d'un batiment
     */
    public function executeCreate($_id_filiere) {
	$this->setTitle('Ajout d\'une spécialité');

	$formulaire = new shFormulaire;
	$formulaire->setSubmitText('Ajouter cette spécialité');

	// Intitulé de la salle
	shField::text('Intitulé')
		->appendTo($formulaire);

	// Liste des filières
	$select = shField::select('Filière associée')
		->setValue($_id_filiere)
		->appendTo($formulaire);

	// On rempli le select
	$filieres = shSGBD::select('SELECT id,intitule FROM filiere ORDER BY intitule ASC');
	foreach ($filieres as $filiere) {
	    $select->addOption($filiere->id, $filiere->intitule);
	}

	$formulaire->setCheck(function($formulaire) {
		    if (!$formulaire->isError()) {
			// On vérifie qu'une spécialité du même nom n'existe pas déja
			if ( shSGBD::count(
				'SELECT count(id) '.
				'FROM specialite '.
				'WHERE intitule=:intitule AND id_filiere=:id_filiere ',
				array (':intitule'=>$formulaire->getField('Intitulé')->getValue(),
				':id_filiere'=>$formulaire->getField('Filière associée')->getValue())) > 0 ) {
			    $formulaire->getField('Intitulé')->setError('Une autre spécialité de cette filère possède le même intitulé');
			}
		    }
		})
	;

	$formulaire->setSubmit(function($formulaire) {
		    // On crée le nouveau profil
		    shSGBD::update('INSERT INTO specialite(intitule,id_filiere) VALUES (:intitule,:id_filiere) ',
			    array( ':intitule' => $formulaire->getField('Intitulé')->getValue(),
			    ':id_filiere' => $formulaire->getField('Filière associée')->getValue()));
		    shAction::redirect('administration','filiere');
		})
	;

	$this->assign('formulaire', $formulaire);
    }

    /**
     *
     * @todo faire le necessaire sur les autres tables
     */
    public function executeDelete($_id_specialite) {
	$this->setTitle('Suppression d\'une spécialité');

	//  --  Promotion
	//	--  Responsable
	//	--  Assister
	//	--  Groupe
	//	--  Jours_desactives_promotion
	//	--  Mutualiser

	// On récupère toutes les promotions des spécialités
	$promotions = shSGBD::select('SELECT id FROM promotion '.
		'WHERE id_specialite=?',$_id_specialite);

	// On supprime chaque promotion
	foreach ($promotions as $promotion) {
	    $this->call('promotion','delete',array($promotion->id));
	}

	// Ensuite on termine la suppression du batiment
	shSGBD::delete('DELETE FROM specialite WHERE id=? ',array($_id_specialite));

	// On retourne sur la page
	shAction::redirect('administration','filiere');
    }
}
?>